<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../rurple.css" type="text/css" />

<title>Ein Rezept für Schokoladenschaumkuchen</title>
</head>
<body>
<h2 class="title">34. Ein Rezept für Schokoladenschaumkuchen</h2>

<p>Ich weiß nicht, wie es dir geht, aber ich bin hungrig. Es wäre wirklich toll,
leckeren Schokoladenschaumkuchen zu essen. Wir brauchen:</p>

<ul>
<li><span style="text-decoration: underline;">Liste der Zutaten</span></li>
<ul>
<li>4 Eier</li>
<li>100 g Zucker</li>
<li>250 g Halbbitterschokolade</li>
<li>30 ml Kakaopuder</li>
</ul>
</ul>

<p>Um den Kuchen tatsächlich zu backen, brauchen wir das Rezept. Etwa so:</p>

<ul>
<li>Ofen auf 180 °C vorheizen</li>
<li>Eigelb von Eiweiß trennen.</li>
<li>etc.</li>
</ul>

<p>Ein Rezept hat sehr viel mit einem Computerprogramm gemeinsam: es ist eine 
Reihe von Anweisungen, die man in der richtigen Reihenfolge ausführen muss, um
das erwünschte Ergebnis zu bekommen. Ich denke, wir haben genug über
Programmieren zu lernen, so dass ich die Kochlektion hier abbreche und auf
Python zurückkomme.</p>

<!--==============================-->
<hr class="line" />

<h3 class="section">Listen</h3>

<p>Hier sind ein paar Dinge, die du mit dem Python-Interpreter ausprobieren
kannst:</p>

<pre>
>>> zutaten = [<span class="string">"4 Eier"</span>, <span class="string">"100 g Zucker"</span>, 
...     <span class="string">"250 g Halbbitterschokolade"</span>, <span class="string">"30 ml Kakaopuder"</span>]
>>> 
</pre>

<p><tt>zutaten</tt> ist ein Beispiel für eine <i>Python-Liste</i>. Eine Liste in Python
kann eine beliebige Anzahl von Elementen enthalten. In dem von uns gewählten Beispiel
sind alle Zutaten Zeichenfolgen; aber auch Zahlen, sogar andere Listen und
Python-Objekte, die wir noch kennen lernen werden, können Listenelemente sein. Nun
probier mal folgendes aus:</p>

<pre>
>>> <span class="keyword">for</span> zutat <span class=
"keyword">in</span> zutaten:
...    <span class="keyword">print</span> zutat
4 Eier
100 g Zucker
250 g Halbbitterschokolade
30 ml Kakaopuder

>>> zutaten[0]
<span class="string">'4 Eier'</span>

>>> zutaten[0:2]
[<span class="string">'4 Eier'</span>, <span class="string">'100 g Zucker'</span>]
</pre>

<p>Das sollte dir bekannt vorkommen, auch wenn es etwas anders aussieht als
das, was du bei den Zeichenfolgen gesehen hast. Probier auch mal dies:</p>

<pre>
>>> <span class="keyword">for</span> zeichen <span class="keyword">in</span> zutaten[0]:
...     <span class="keyword">print</span> zeichen
...    
4
 
E
i
e
r

>>> zutaten[0][2]
<span class="string">'E'</span>

>>> <span class="string">'4 Eier'</span>[2]
<span class="string">'E'</span>
</pre>

<p>Wie wir gerade gesehen haben, hat <tt>zutaten[0]</tt> den Wert <span
class="string">'4 Eier'</span>; also ist <tt>zutaten[0][2]</tt> das
dritte Zeichen (denk dran, dass Python ab 0 zählt) der Zeichenfolge
<span class="string">'4 Eier'</span>.</p>

<p>Jetzt habe ich in dem Rezept oben noch eine leckere Zutat vergessen:
<i>Schlagsahne</i> als Garnierung. Ich kann sie folgendermaßen
hinzufügen und prüfen, dass sie hinzugefügt wurden:</p>

<pre>
>>> zutaten.append(<span class="string">"Schlagsahne"</span>)
>>> <span class="keyword">print</span> zutaten
[<span class="string">'4 Eier'</span>, <span class="string">'100 g Zucker'</span>, <span class="string">'250 g Halbbitterschokolade'</span>, <span class="string">'30 ml Kakaopuder'</span>, <span class="string">'Schlagsahne'</span>]
</pre>

<p><tt>append()</tt>ist eine Methode der Klasse "list". <tt>zutaten</tt> ist
eine Instanz dieser Klasse. Wir <i>rufen</i> die Methode <tt>append</tt> für die
Instanz <tt>zutaten</tt> <i>auf</i>, indem wir sie mit einem "." verbinden, wie
wir es in der Lektion über Objektorientierte Programmierung gesehen haben. Das
<i>Argument</i> von <tt>append</tt> ist das Objekt, das wir zur Liste 
hinzufügen wollen. Es wird immer ans Ende der Liste angehängt.
</p>

<p>Listen haben viele Methoden; ich werde sie vorstellen, wenn sie gebraucht 
werden. Wenn du sie alle sehen willst, gib einfach <tt>dir([])</tt> im
Python-Interpreter ein; <tt>[]</tt> ist übrigens eine leere Liste - jede andere
Liste würde zum gleichen Ergebnis führen. Schau mal, ob du die Methode 
<tt>append</tt> ausfindig machen kannst.</p>

<p>Jetzt, wo du weißt, wie man Elemente zu einer Liste hinzufügt, müssen wir
auch wissen, wie man sie entfernt. Um das zu tun, brauchen wir das Schlüsselwort
<span class="pykeyword">del</span>.</p>

<pre>
>>> <span class="keyword">del</span> zutaten[3]
>>> <span class="keyword">print</span> Zutaten
[<span class="string">'4 Eier'</span>, <span class="string">'100 g Zucker'</span>, <span class="string">'250 g Halbbitterschokolade'</span>, <span class="string">'Schlagsahne'</span>]
</pre>

<p>Das Schlüsselwort <span class="pykeyword">del</span> kann viel mehr als
Elemente aus einer Liste zu entfernen. Es kann zum Beispiel den
Python-Interpreter veranlassen, Variablen, die du definiert hast, wieder zu 
vergessen.
</p>

<pre>
>>> a = 3
>>> <span class="keyword">print</span> a
3
>>> <span class="keyword">del</span> a
>>> <span class="keyword">print</span> a
Traceback (most recent call last):
  File <span class="string">"&lt;input>"</span>, line 1, in ?
NameError: name <span class="string">'a'</span> is not defined
</pre>

<!--==============================-->
<hr class="line" />

<h3 class="try">Probier's aus!</h3>

<p>Schreib in Reeborgs Welt ein einfaches Programm, das zwei Roboter mit
verschiedenen Namen erzeugt, sie ein paar Schritte gehen lässt und dann
versucht, einen von beiden mit dem Schlüsselwort <span class="pykeyword">
del</span> verschwinden zu lassen. Wahrscheinlich musst du den verbliebenen
Roboter noch einen Schritt gehen zu lassen (bevor du ihn ausschalten kannst),
um den anderen Roboter vom Bildschirm verschwinden zu lassen.</p>

<!--==============================-->
<hr class="line" />

<h3 class="section">Eine Anmerkung zu <tt>range()</tt></h3>

<p>Du bist jetzt so weit, ein Geheimnis über die Funktion <tt>range()</tt>
zu erfahren:</p>

<pre>
>>> <span class="keyword">print</span> range(6)
[0, 1, 2, 3, 4, 5]
</pre>

<p>Genau so ist es: <tt>range()</tt> erzeugt ganz einfach eine Liste!</p>

<!--==============================-->
<hr class="line" />

<h3 class="section">Listen, Ganzzahlen und Zeichenfolgen umwandeln</h3>

<p>Hier sind ein paar nützliche Funktionen, um zwischen den <i>Datentypen</i> zu
konvertieren.</p>

<pre>
>>>  erste_zahl = 1304
>>>  zweite_zahl = 987
>>>  
>>>  <span class="comment"># str() konvertiert eine Ganzzahl in eine Zeichenfolge.</span>
>>>  erste_zeichenfolge = str(erste_zahl)
>>>  erste_zeichenfolge
'1304'
>>>  zweite_zeichenfolge = str(zweite_zahl)
>>>  zweite_zeichenfolge
'987'

>>>  <span class="comment"># int() konvertiert eine Zeichenfolge in eine Ganzzahl.</span>
>>>  int(erste_zeichenfolge)
1304

>>>  <span class="comment"># list() konvertiert eine Zeichenfolge in eine Liste.</span>
>>>  erste_liste = list(erste_zeichenfolge)
>>>  erste_liste
['1', '3', '0', '4']

>>>  zweite_liste = list(zweite_zeichenfolge)
>>>  zweite_liste
['9', '8', '7']

>>>  <span class="comment"># join() erzeugt eine Zeichenfolge aus eine Liste von Zeichenfolgen.</span>
>>>  '...'.join(zweite_zeichenfolge)
'9...8...7'
>>>  '-'.join(erste_zeichenfolge)
'1-3-0-4'
>>>  <span class="comment"># Elemente mit einer leeren Zeichenfolge verketten...</span>
>>>  ''.join(erste_zeichenfolge)
>>>  '1304'
>>>  ''.join(zweite_zeichenfolge)
>>>  '987'

>>>  <span class="comment"># Das letzte Element einer Liste mit pop() herausholen.</span>
>>>  <span class="comment"># pop() ist gewissermaßen das Gegenteil von append().</span>
>>>  erste_liste
['1', '3', '0', '4']
>>>  letztes_element = erste_liste.pop()
>>>  letztes_element
'4'
>>>  erste_liste
['1', '3', '0']

>>>  <span class="comment"># Die Funktion len() ermittelt die Anzahl der</span>
>>>  <span class="comment"># Elemente in einer Liste.</span>
>>>  len(erste_liste)
3
</pre>

<!--==============================-->
<hr class="line" />

<h3 class="try">Hilf Reeborg, mit Listen, Zeichenfolgen und Ganzzahlen zu
addieren.</h3>

<p>Hilf Reeborg, zwei Zahlen zu addieren, wie unten dargestellt, indem du das 
anwendest, was wir gerade über Listen, Zeichenfolgen und Ganzzahlen gelernt
haben.</p>

<p><img alt="before addition" src=
"../../images/inter/add34_start.png" /></p>

<p><img alt="after addition" src=
"../../images/inter/add34_end.png" /></p>

<div class="lessons_nav">
<a href="33-for.htm"><img alt="previous" src=
"../../images/previous.png" />Repeat verbirgt Schlüsselwörter.</a> - <a href=
"../lessons_toc.htm"><img alt="home" src="../../images/home.png" /></a> - <a href=
"35-dicts.htm">Merk's dir mit Python<img alt="next"
src="../../images/next.png" /></a>
</div>
</body>
</html>
